#pragma once

#pragma warning (disable: 4996 4065)

#include <Windows.h>
#include <Windowsx.h>
#include <stdio.h>
#include <time.h>
#include <shlobj.h>

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#define INT8 char
#define INT16 short
#define INT32 int
#define INT64 __int64
#define UINT8 unsigned char
#define UINT16 unsigned short
#define UINT32 unsigned int
#define UINT64 unsigned __int64
#define PCHAR char*
#define CHAR char
#define CONST_PCHAR const char*
#define DOUBLE double
#define WCHAR __wchar_t
#define PWCHAR __wchar_t*
#define CONST_PWCHAR const __wchar_t*
#define PVOID void*
#define CONST_PVOID const void*
#define BYTE unsigned char
#define PBYTE unsigned char*

class IString;
class IList;
class IStringList;

#define ALIGN4(align_val) (((align_val) & (~0x3)) + 4)
#define ALIGN2048(align_val) (((align_val) & (~2047)) + 2048)
#define ALIGN ALIGN4

#include "ICore.h"
#include "IString.h"
#include "IList.h"
#include "IStringList.h"

// Exportovane funkcie
extern "C" __declspec(dllexport) void __stdcall ShowShellContextMenu(HWND pHandle, PCHAR pObjects, INT32 pX, INT32 pY);
extern "C" __declspec(dllexport) void __stdcall ExecuteShellCommand(HWND pHandle, PCHAR pObjects, PCHAR pCommand);
extern "C" __declspec(dllexport) void __stdcall ShowItemPropertyWindow(HWND pHandle, PCHAR pObject);
extern "C" __declspec(dllexport) void __stdcall ShowAdvancedShareWindow(HWND pHandle, PCHAR pObject);

extern "C" __declspec(dllexport) INT64 __stdcall GetDeviceCapacity(PCHAR pPath);
extern "C" __declspec(dllexport) INT64 __stdcall GetDeviceFreeSpace(PCHAR pPath);

extern "C" __declspec(dllexport) void* __stdcall AllocateMemory(INT32 pCapacity);
extern "C" __declspec(dllexport) void __stdcall FreeMemory(void *pHandle);

extern "C" __declspec(dllexport) FILE* __stdcall OpenLocalFileForRead(PCHAR pFileName);
extern "C" __declspec(dllexport) void __stdcall CloseLocalFile(FILE *pHandle);
extern "C" __declspec(dllexport) FILE* __stdcall CreateLocalFile(PCHAR pFileName);
extern "C" __declspec(dllexport) INT32 __stdcall WriteToLocalFile(FILE *pHandle, void* pData, INT32 pLength);
extern "C" __declspec(dllexport) INT32 __stdcall ReadFromLocalFile(FILE *pHandle, void* pData, INT32 pMaxLength);
extern "C" __declspec(dllexport) INT32 __stdcall SetFileDateTime(PCHAR pName, UINT64 pDCreate, UINT64 pDModify, UINT64 pDLastAccess);
